/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package eeep.dao;

import eeep.entidades.Livro;
import eeep.util.ConnectionFactory;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 *
 * @author Junior
 */
public class LivroDAO {

    public void salvarLivro(Livro livro) {
        String sql = "insert into livro(genero_livro,  nome_livro, tombo_livro, autor_livro, editora_livro, ano_lancamento_livro, origem_livro, data_livro, assunto_livro,status_livro)"
                + " VALUES(?,?,?,?,?,?,'"+livro.getOrigem()+"','"+livro.getData()+"',?,true)";

        Connection conn = null;
        PreparedStatement pstm = null;
        try {
            // Cria uma conexÃ£o com o banco
            conn = ConnectionFactory.getConexao();

            // Cria um PreparedStatment, classe usada para executar a query
            pstm = conn.prepareStatement(sql);
            pstm.setString(1, livro.getGenero());
            pstm.setString(2, livro.getNome());
            pstm.setString(3, livro.getCodigo());
            pstm.setString(4, livro.getAutor());
            pstm.setString(5, livro.getEditora());
            pstm.setInt(6, livro.getAno_de_lancamento());
//            pstm.setDate(7, (Date) livro.getOrigem());
//            pstm.setDate(8, (Date) livro.getData());
            pstm.setString(7, livro.getAssunto());
            
            
            // Executa a sql para inserÃ§Ã£o dos dados
            pstm.execute();

        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            // Fecha as conexÃµes
            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }

    public Livro getLivroPorCodigo(String codigo) {

        String sql = "SELECT * FROM livro where tombo_livro=?";

        Connection conn = null;
        PreparedStatement pstm = null;
        // Classe que vai recuperar os dados do banco de dados
        ResultSet rset = null;

        try {
            conn = ConnectionFactory.getConexao();

            pstm = conn.prepareStatement(sql);
            pstm.setString(1, codigo);

            rset = pstm.executeQuery();
            Livro livro = new Livro(null, null, null, null, null, 0, null, null, null, true);
            // Enquanto existir dados no banco de dados, faÃ§a
            while (rset.next()) {

                // Recupera o nome do banco e atribui ele ao objeto
                livro.setNome(rset.getString("nome_livro"));

                // Recupera a idade do banco e atribui ele ao objeto
                livro.setGenero(rset.getString("genero_livro"));

                // Recupera a data do banco e atribui ela ao objeto
                livro.setCodigo(rset.getString("tombo_livro"));

                livro.setAutor(rset.getString("autor_livro"));
                
                livro.setEditora(rset.getString("editora_livro"));

                livro.setAno_de_lancamento(rset.getInt("ano_lancamento_livro"));
                
                livro.setOrigem(rset.getDate("origem_livro"));
                
                livro.setData(rset.getDate("data_livro"));
                
                livro.setAssunto(rset.getString("assunto_livro"));
                livro.setStatus(rset.getBoolean("status_livro"));

                // Adiciono o contato recuperado, a lista de contatos
                return livro;
            }
        } catch (Exception e) {

            e.printStackTrace();
        } finally {

            try {

                if (rset != null) {

                    rset.close();
                }

                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }

        return null;
    }

    public void Atualizar(Livro livro) {
        String sql = "UPDATE livro SET nome_livro = ? and genero_livro = ? and tombo_livro = ? and autor_livro = ? and editora_livro = ? and ano_lancamento_livro = ? and origem_livro = '"+livro.getOrigem()+"' and data_livro = '"+livro.getData()+"1 and assunto_livro = ? and status_livro = ?" + "WHERE tombo_livro = ?";

        Connection conn = null;
        PreparedStatement pstm = null;

        try {
            conn = ConnectionFactory.getConexao();
            pstm = conn.prepareStatement(sql);

            pstm.setString(1, livro.getNome());
            pstm.setString(2, livro.getGenero());
            pstm.setString(3, livro.getCodigo());
            pstm.setString(4, livro.getAutor());
            pstm.setString(5, livro.getEditora());
            pstm.setInt(6, livro.getAno_de_lancamento());
//            pstm.setDate(7, livro.getOrigem());
//            pstm.setDate(8, livro.getData());
            pstm.setString(7, livro.getAssunto());
            

            pstm.execute();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            try {
                if (conn != null) {
                    conn.close();
                }
                if (pstm != null) {

                    pstm.close();
                }
            } catch (Exception e) {

                e.printStackTrace();
            }

        }
    }

    public void removerLivro(String codigo) {
        String sql = "DELETE FROM livro where tombo_livro=?";

        Connection conn = null;
        PreparedStatement pstm = null;

        try {
            conn = ConnectionFactory.getConexao();

            pstm = conn.prepareStatement(sql);

            pstm.setString(1, codigo);

            pstm.execute();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {

            try {
                if (pstm != null) {

                    pstm.close();
                }

                if (conn != null) {
                    conn.close();
                }

            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }
    public void atualizarStatusLivroEmprestimo(String codigo) {
        String sql = "UPDATE livro SET status_livro = false WHERE tombo_livro = ?";

        Connection conn = null;
        PreparedStatement pstm = null;

        try {
            conn = ConnectionFactory.getConexao();
            pstm = conn.prepareStatement(sql);

            pstm.setString(1, codigo);
            
            

            pstm.execute();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            try {
                if (conn != null) {
                    conn.close();
                }
                if (pstm != null) {

                    pstm.close();
                }
            } catch (Exception e) {

                e.printStackTrace();
            }

        }
    }
    public void atualizarStatusLivroDevolucao(String codigo) {
        String sql = "UPDATE livro SET status_livro = true WHERE tombo_livro = ?";

        Connection conn = null;
        PreparedStatement pstm = null;

        try {
            conn = ConnectionFactory.getConexao();
            pstm = conn.prepareStatement(sql);

            pstm.setString(1, codigo);
            
            

            pstm.execute();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            try {
                if (conn != null) {
                    conn.close();
                }
                if (pstm != null) {

                    pstm.close();
                }
            } catch (Exception e) {

                e.printStackTrace();
            }

        }


}
}
